package com.mzy.springboot.config;

import com.mzy.springboot.bean.*;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.*;

/*proxyBeanMethods 配置为false
通过获取配置对象再调用配置对象中的bean方法获取的对象就是多列
但如何还是通过ioc的getBean方法调用，获取的对象依然是单列*/
// @Configuration(proxyBeanMethods = false)
// @Import({Dog.class, Cat.class})
// @ImportResource 可以将原生的xml配置方式引入到配置类中
@ImportResource(locations = "classpath:beans.xml")
@Configuration
@EnableConfigurationProperties(Furn.class)
public class BeanConfig {

    @Bean
    // @Scope("prototype")
    public Monster monster01() {
        return new Monster();
    }

    // @Bean(name = "aaa")
    public A a() {
        return new A();
    }

    @Bean
    // 当容器中有 name 值为 aaa 的 bean 它才会被注入
    // @ConditionalOnBean(name = "aaa")
    // 当容器中没有 name 值为 aaa 的 bean 它才会被注入
    @ConditionalOnMissingBean(name = "aaa")
    public Dog dog() {
        return new Dog();
    }
}
